package com.jh.user.service;

import cn.jh.common.pojo.BaseResponse;
import com.jh.user.business.DataBusiness;
import com.jh.user.pojo.Data;
import com.jh.user.pojo.DataDTO;
import com.jh.user.pojo.enums.DataEnums;
import org.apache.commons.beanutils.BeanMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@EnableAutoConfiguration
public class DataService {

    private  Logger LOG = LoggerFactory.getLogger(DataService.class);

    @Autowired
    private DataBusiness dataBusiness;


    /**
     *
     * 行业类别数据查询
     */
    @RequestMapping(method=RequestMethod.GET,value="/v1.0/user/data/findIndustryCategory")
    public @ResponseBody
    Object findPage(){
        Map<Long,DataDTO> returnData = new HashMap<Long,DataDTO>();
        Map<Long,DataDTO> nextData = new HashMap<Long,DataDTO>();
        Map<Long,List<DataDTO>> lastData = new HashMap<Long,List<DataDTO>>();
        List<Data> list = dataBusiness.findByDataType(DataEnums.IndustryCategory.getValue());
        for (Data data : list){
            DataDTO dataDTO = new DataDTO();
            BeanUtils.copyProperties(data,dataDTO);
            if (data.getParentId() == 0 ){
                returnData.put(data.getId(),dataDTO);
            }else if (returnData.containsKey(data.getParentId())){
                nextData.put(data.getId(),dataDTO);
            }else {
                List<DataDTO> dataDTOS = lastData.get(data.getParentId());
                if (dataDTOS ==null){
                    dataDTOS = new ArrayList<>();
                    dataDTOS.add(dataDTO);
                    lastData.put(data.getParentId(),dataDTOS);
                }else {
                    dataDTOS.add(dataDTO);
                }
            }
        }

        for (Long id : lastData.keySet()){
            if (nextData.containsKey(id)){
                DataDTO dataDTO = nextData.get(id);
                dataDTO.setDataDTOList(lastData.get(id));
            }
        }
        Map<Long,List<DataDTO>> longListMap = new HashMap<>();
        for(Map.Entry<Long,DataDTO> entry : nextData.entrySet()){
            List<DataDTO> dataDTOS = longListMap.get(entry.getValue().getParentId());
            if (dataDTOS ==null){
                dataDTOS = new ArrayList<>();
                dataDTOS.add(entry.getValue());
                longListMap.put(entry.getValue().getParentId(),dataDTOS);
            }else {
                dataDTOS.add(entry.getValue());
            }
        }

        for (Long id : longListMap.keySet()){
            if (returnData.containsKey(id)){
                DataDTO dataDTO = returnData.get(id);
                dataDTO.setDataDTOList(longListMap.get(id));
            }
        }
        List<DataDTO> data = new ArrayList<>();
        for (Long id : returnData.keySet()){
            data.add(returnData.get(id));
        }
        return BaseResponse.success(data);
    }


}
